
package Controladora;

import Negocio.Endereco;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import BoundaryGUI.TelaCadPacienteGUI;
import BoundaryGUI.TelaListarPacientesGUI;
import Negocio.Paciente;
import Negocio.Endereco;
import Persistencia.Pacientes;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Victor
 */
public class ControlaPaciente {
 
    private Pacientes listaPacientes;

    public ControlaPaciente() {
        
        listaPacientes = new Pacientes();
        
        
    }
    
    public void cadastrarPaciente(TelaCadPacienteGUI tela)
    {
        
        if(!existePacienteCadastrado(tela.getJtcpf().getText()))    
        {
            
            if(tela.getJtNome().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Nome Vazio!");
            }
            else if(tela.getJtcpf().getText().equals("   .   .   -  "))
            {
                JOptionPane.showMessageDialog(null, "Campo CPF Vazio!");
            }
            else if(tela.getJcSexo().getSelectedIndex() == 0)
            {
                JOptionPane.showMessageDialog(null, "Campo Sexo Vazio!");
            }
            else if(tela.getJtDataNasc().getText().equals("  /  /    "))
            {
                JOptionPane.showMessageDialog(null, "Campo Data Nascimento Vazio!");
            }
            else if(tela.getJtTelefone().getText().equals("(  )     -    "))
            {
                JOptionPane.showMessageDialog(null, "Campo Telefone Vazio!");
            }
            else if(tela.getJtEmail().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo E-mail Vazio!");
            }
            
            
            
            
            else if(tela.getJtRua().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Rua Vazio!");
            }
            else if(tela.getJtNumero().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Numero Vazio!");
            }
            else if(tela.getJtBairro().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Bairro Vazio!");
            }
            else if(tela.getJtCidade().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Cidade Vazio!");
            }
            else if(tela.getJcEstado().getSelectedIndex() == 0)
            {
                JOptionPane.showMessageDialog(null, "Campo Estado Vazio!");
            }
            else
            {
                Endereco endereco = new Endereco(tela.getJtRua().getText(), tela.getJtNumero().getText(), tela.getJtBairro().getText(), tela.getJtCidade().getText(), tela.getJcEstado().getSelectedItem().toString());

                Paciente c = new Paciente(tela.getJtNome().getText(), tela.getJtcpf().getText(), tela.getJcSexo().getSelectedItem().toString().charAt(0), tela.getJtDataNasc().getText(), tela.getJtTelefone().getText(), tela.getJtEmail().getText(), endereco);

                int op = JOptionPane.showConfirmDialog(null, "Confirma Dados do Paciente?");

                if(op == 0)
                {
                    listaPacientes.adiciona(c);
                    JOptionPane.showMessageDialog(null, "Paciente Salvo com Sucesso!");
                    bloquearTelaPraEdição(tela);
                } 
            }
        }
        else
        {
            Paciente c = buscarPacientePorCPF(tela.getJtcpf().getText());
            listaPacientes.excluirPaciente(c);
            cadastrarPaciente(tela);
        }
    }

    public void carregarDados()
    {
        listaPacientes.leitura();        
    }
    
    public void carregarTabela(TelaListarPacientesGUI tela)
    {
        DefaultTableModel tm;
        Object colunas[] = {"Nome", "CPF", "Sexo", "Nascimento", "Telefone", "E-mail"};
        tm = new DefaultTableModel(colunas, 0);
        tm.setNumRows(0);
        
        for (int i = 0; i < listaPacientes.getPacientes().size(); i++) 
        {
            Paciente c = (Paciente) listaPacientes.getPacientes().get(i);
            String c1 = c.toString();
            String linha[] = c1.split("%");
            tm.addRow(new Object[]{linha[0], linha[1], linha[2], linha[3], linha[4], linha[5]});
        }
        tela.getJtPacientes().setModel(tm);
        
    }
    
    
    private void carregarTabela(TelaListarPacientesGUI tela, String pNome, int sexo) 
    {
        DefaultTableModel tm;
        Object colunas[] = {"Nome", "CPF", "Sexo", "Nascimento", "Telefone", "E-mail"};
        tm = new DefaultTableModel(colunas, 0);
        tm.setNumRows(0);
        
        char pSexo;
        
        if(sexo == 1) {
            pSexo = 'M';
        }
        else {
            pSexo = 'F';
        }
        

        for (int i = 0; i < listaPacientes.getPacientes().size(); i++) 
        {
            Paciente c = (Paciente) listaPacientes.getPacientes().get(i);
            
            //Procurar Só Pelo Sexo
            if(pNome.equals("NULL"))
            {
                if(c.getSexo() == pSexo)
                {
                    String c1 = c.toString();
                    String linha[] = c1.split("%");
                    tm.addRow(new Object[]{linha[0], linha[1], linha[2], linha[3], linha[4], linha[5]});
                }
            }
            //procurar só pelo nome
            else if(sexo == -3)
            {
                if(c.getNome().toLowerCase().contains(pNome.toLowerCase()))
                {
                    String c1 = c.toString();
                    String linha[] = c1.split("%");
                    tm.addRow(new Object[]{linha[0], linha[1], linha[2], linha[3], linha[4], linha[5]});
                }
            }
            //procurar por nome e sexo
            else
            {
                if(c.getNome().toLowerCase().contains(pNome.toLowerCase()) && c.getSexo() == pSexo)
                {
                    String c1 = c.toString();
                    String linha[] = c1.split("%");
                    tm.addRow(new Object[]{linha[0], linha[1], linha[2], linha[3], linha[4], linha[5]});
                }
            
            }
        }
        tela.getJtPacientes().setModel(tm);
    }
   
    
    public void carregarTabelaPesquisa(TelaListarPacientesGUI tela)
    {
        if(tela.getJtPesquisar().getText().equalsIgnoreCase("") && tela.getJcSexo().getSelectedIndex() == 0)
            {
                carregarTabela(tela);
            }
            else if( tela.getJcSexo().getSelectedIndex() != 0 && tela.getJtPesquisar().getText().length() > 0)
            {
                carregarTabela(tela, tela.getJtPesquisar().getText(),tela.getJcSexo().getSelectedIndex());

            }
            else if(tela.getJcSexo().getSelectedIndex() != 0)
            {
                carregarTabela(tela, "NULL", tela.getJcSexo().getSelectedIndex());
            }
            else if(tela.getJtPesquisar().getText().length() > 0)
            {
                carregarTabela(tela, tela.getJtPesquisar().getText(),-3);
            } 
    }
    
    
    
    public void ExcluirPaciente(TelaListarPacientesGUI tela) {
        
        try 
        {

            int linha = tela.getJtPacientes().getSelectedRow();
            String pCpf;

            if (linha == -1) 
            {
                throw new Exception("Selecione Uma Linha Primeiro!");
            }

            int x = JOptionPane.showConfirmDialog(null, "Deseja Realmente Excluir?");
            
            if (x == JOptionPane.YES_OPTION) 
            {
                pCpf = (String) tela.getJtPacientes().getValueAt(linha, 1);
                Paciente c = buscarPacientePorCPF(pCpf);
             
                listaPacientes.excluirPaciente(c);
                
                JOptionPane.showMessageDialog(null, "Paciente Excluido com Sucesso!");
                carregarTabela(tela);
            }
            
        } catch (Exception e) 
        {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
        
    }
    
    public boolean existePacienteCadastrado(String pCPF)
    {
        if(listaPacientes.buscarPacientePorCPF(pCPF) != null)
        {
            return true;
        }
        else
        {
            return false;
        }
        
    }
    
    
    public Paciente buscarPacientePorNome(String pNomePaciente)
    {
       
        return listaPacientes.buscarPacientePorNome(pNomePaciente);
        
    }
    
    public Paciente buscarPacientePorCPF(String pCPF)
    {
       
        return listaPacientes.buscarPacientePorCPF(pCPF);
        
    }

    public void LimparCampos(TelaCadPacienteGUI tela)
    {
        tela.getJcEstado().setSelectedIndex(0);
        tela.getJcSexo().setSelectedIndex(0);
        
        tela.getJtBairro().setText("");
        tela.getJtCidade().setText("");
        tela.getJtDataNasc().setText("");
        tela.getJtEmail().setText("");
        tela.getJtNome().setText("");
        tela.getJtNumero().setText("");
        tela.getJtRua().setText("");
        tela.getJtTelefone().setText("");
        tela.getJtcpf().setText("");
    }
    
    public void liberarTelaPraEdição(TelaCadPacienteGUI tela)
    {
        tela.getJcEstado().setEditable(true);
        tela.getJcSexo().setEditable(true);
        tela.getJtBairro().setEditable(true);
        tela.getJtCidade().setEditable(true);
        tela.getJtDataNasc().setEditable(true);
        tela.getJtEmail().setEditable(true);
        tela.getJtNome().setEditable(true);
        tela.getJtNumero().setEditable(true);
        tela.getJtRua().setEditable(true);
        tela.getJtTelefone().setEditable(true);
        tela.getJtcpf().setEditable(true);
        
        tela.getBtnSalvar().setEnabled(true);
    }
    
    public void bloquearTelaPraEdição(TelaCadPacienteGUI tela)
    {
        tela.getJcEstado().setEditable(false);
        tela.getJcSexo().setEditable(false);
        tela.getJtBairro().setEditable(false);
        tela.getJtCidade().setEditable(false);
        tela.getJtDataNasc().setEditable(false);
        tela.getJtEmail().setEditable(false);
        tela.getJtNome().setEditable(false);
        tela.getJtNumero().setEditable(false);       
        tela.getJtRua().setEditable(false);
        tela.getJtTelefone().setEditable(false);
        tela.getJtcpf().setEditable(false);
        
        tela.getBtnSalvar().setEnabled(false);
    }

    public void visualizarEditarPaciente(TelaListarPacientesGUI tela) {
        
        try
        {
            
            int linha = tela.getJtPacientes().getSelectedRow();
            String pCpf;

            if (linha == -1) 
            {
                throw new Exception("Selecione Uma Linha Primeiro!");
            }

            pCpf = (String) tela.getJtPacientes().getValueAt(linha, 1);
            Paciente c = buscarPacientePorCPF(pCpf);
             
            TelaCadPacienteGUI tEdit = new TelaCadPacienteGUI(this);

            if(c.getSexo() == 'M')
            {
                tEdit.getJcSexo().setSelectedIndex(1);
            }
            else
            {
                tEdit.getJcSexo().setSelectedIndex(2);
            }
            
            int uf = 0;
            if(c.getEndereco().getUF().equals("ES"))
            {
                uf = 1;
            }
            else if(c.getEndereco().getUF().equals("MG"))
            {
                uf = 2;
            }
            else if(c.getEndereco().getUF().equals("RJ"))
            {
                uf = 3;
            }
            else if(c.getEndereco().getUF().equals("SP"))
            {
                uf = 4;
            }
            tEdit.getJcEstado().setSelectedIndex(uf);
            tEdit.getJtRua().setText(c.getEndereco().getLogradouro());
            tEdit.getJtNumero().setText(c.getEndereco().getNumero());
            tEdit.getJtBairro().setText(c.getEndereco().getBairro());
            tEdit.getJtCidade().setText(c.getEndereco().getCidade());
            
            tEdit.getJtNome().setText(c.getNome());
            tEdit.getJtcpf().setText(c.getCPF());
            tEdit.getJtDataNasc().setText(c.getDataNasc());
            tEdit.getJtTelefone().setText(c.getTelefone());
            tEdit.getJtEmail().setText(c.getEmail());
            
            bloquearTelaPraEdição(tEdit);

        }catch(Exception e)
        {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }
}